home *** CD-ROM | disk | FTP | other *** search
- /* Beep.c
- **
- ** Copyright 1995, mFactory, Inc.
- ** All rights reserved.
- */
-
- #include "Beep.h"
-
- #define kActivatePopup 6 // DITL indices
- #define kNumBeepsField 9
-
- #define kBeepsAttrib ((CompID *) "beeps\0\0\0\0\0\0\0\0\0\0\0") // attribute
-
-
- /* Initial entry point
- */
-
- MCompMainFuncDcl MCompMainName(MInitInfo *initInfo)
- {
- MDefineComponent(BeepComp, kMCanDragOff);
- MInheritClass(MComponent, kMCompNumProcs, kMBaseCompSlot);
-
- // MComponent methods we must override
-
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompConstructor, MCompConstructor);
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompCopy, MCompCopy);
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompCopyConstructor, MCompCopyConstructor);
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompDestructor, MCompDestructor);
-
- // MComponent methods we choose to override
-
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompEditorOpen, MCompEditorOpen);
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompEditorAccept, MCompEditorAccept);
-
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompGetSaveInfo, MCompGetSaveInfo);
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompSaveComponent, MCompSaveComponent);
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompRestoreComponent, MCompRestoreComponent);
-
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompEnabled, MCompEnabled);
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompDisabled, MCompDisabled);
-
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompProcessMessage, MCompProcessMessage);
-
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompGetAttribute, MCompGetAttribute);
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompSetAttribute, MCompSetAttribute);
-
- MDefineMethod(kBeepSlot, kMBaseCompSlot, kMCompAdaptIDs, MCompAdaptIDs);
-
- MConnectCommonServices(initInfo);
-
- MEndComponentDef;
- }
-
-
- /* Initialize component
- */
-
- static MErr MCompConstructor(BeepComp *self, MObjectRef *mRef)
- {
- MInitEvent(self->f_activateEvent, kMParentEnabled, 0);
- MInitInteger(self->f_beeps, 1);
- return kMNoCompErr;
- }
-
-
- /* Copy component data
- */
-
- static MErr MCompCopy(BeepComp *self, BeepComp *previousSelf)
- {
- MCopyEvent(self->f_activateEvent, previousSelf->f_activateEvent);
- MCopyInteger(self->f_beeps, previousSelf->f_beeps);
- return kMNoCompErr;
- }
-
-
- /* Copy component
- */
-
- static MErr MCompCopyConstructor(BeepComp *self, BeepComp *previousSelf, MObjectRef *mRef)
- {
- MCompConstructor(self, mRef);
- return MCompCopy(self, previousSelf);
- }
-
-
- /* Dispose component
- */
-
- static MErr MCompDestructor(BeepComp *self)
- {
- MDisposeEvent(self->f_activateEvent);
- MDisposeInteger(self->f_beeps);
- return kMNoCompErr;
- }
-
-
- /* Open component dialog
- */
-
- static MErr MCompEditorOpen(BeepComp *self, void *editor, short editorType)
- {
- if ( editorType == kMDialogEditorType ) {
- MSetEditorItem(editor, kActivatePopup, (MDataType *) &self->f_activateEvent);
- MSetEditorItem(editor, kNumBeepsField, (MDataType *) &self->f_beeps);
- return kMNoCompErr;
- }
- else
- return kMUnableToComplyCompErr;
- }
-
-
- /* Close component dialog
- */
-
- static MErr MCompEditorAccept(BeepComp *self, void *editor)
- {
- MGetEditorItem(editor, kActivatePopup, (MDataType *) &self->f_activateEvent);
- MGetEditorItem(editor, kNumBeepsField, (MDataType *) &self->f_beeps);
- return kMNoCompErr;
- }
-
-
- /* Provide save information
- */
-
- static MErr MCompGetSaveInfo(BeepComp *self, MFileIOServ *file, long saveInfo, short *rev, long *len)
- {
- long valueSize;
-
- MSizeOfValue(file, &self->f_activateEvent, &valueSize);
- *len = valueSize;
- MSizeOfValue(file, &self->f_beeps, &valueSize);
- *len += valueSize;
-
- *rev = kBeepRev;
- return kMNoCompErr;
- }
-
-
- /* Save component
- */
-
- static MErr MCompSaveComponent(BeepComp *self, MFileIOServ *file, long saveInfo)
- {
- MWriteValue(file, &self->f_activateEvent);
- MWriteValue(file, &self->f_beeps);
- return kMNoCompErr;
- }
-
-
- /* Restore component
- */
-
- static MErr MCompRestoreComponent(BeepComp *self, MFileIOServ *file, long saveInfo, short rev)
- {
- if (rev == kBeepRev) {
- MReadValue(file, &self->f_activateEvent);
- MReadValue(file, &self->f_beeps);
- return kMNoCompErr;
- }
- else
- return kMUnableToComplyCompErr;
- }
-
-
- /* Component enabled in runtime
- */
-
- static MErr MCompEnabled(BeepComp *self)
- {
- MRegisterMouseFeedback(self, &self->f_activateEvent);
- return kMNoCompErr;
- }
-
-
- /* Component disabled in runtime
- */
-
- static MErr MCompDisabled(BeepComp *self)
- {
- MDeregisterMouseFeedback(self, &self->f_activateEvent);
- return kMNoCompErr;
- }
-
-
- /* Get component attribute
- */
-
- static MErr MCompGetAttribute(BeepComp *self, MomID attribName, MDataType *selector, MDataType *dataValue)
- {
- if (MCmpMomID(attribName, kMEventsAttrib) && selector) {
- if (selector->f_type.f_type == kMInteger) {
- switch (selector->f_integer.f_value & ~kMEventMask) {
- case kMEventExecute:
- if ((selector->f_integer.f_value & kMEventMask) == 1) {
- MCopyEvent(dataValue->f_event, self->f_activateEvent);
- return kMNoCompErr;
- }
- else
- return kMUnableToComplyCompErr;
-
- default :
- return kMUnableToComplyCompErr;
- }
- }
- else
- return kMUnableToComplyCompErr;
- }
- else if (MCmpMomID(attribName, kBeepsAttrib)) {
- MCopyInteger(dataValue->f_integer, self->f_beeps);
- return kMNoCompErr;
- }
- else
- return kMUnableToComplyCompErr;
- }
-
-
- /* Set component attribute
- */
-
- static MErr MCompSetAttribute(BeepComp *self, MomID attribName, MDataType *selector, MDataType *dataValue)
- {
- if ( MCmpMomID(attribName, kBeepsAttrib) ) {
- MCoerceType(self, dataValue, (MDataType *) &self->f_beeps);
- return MError();
- }
- else
- return kMUnableToComplyCompErr;
- }
-
-
- /* Process incoming message
- */
-
- static MErr MCompProcessMessage(BeepComp *self, MMessagePtr message)
- {
- long i;
- #ifdef _Windows_
- long lastTick = 0;
- long tick;
- BOOL didSound;
- #endif
-
- if ( MDetectMessage(message, self->f_activateEvent) ) {
- for (i=0; i<self->f_beeps.f_value; i++)
- {
- #ifdef _Macintosh_
- SysBeep(1);
- #elif _Windows_
- didSound = FALSE;
- while( didSound == FALSE )
- {
- MGetGlobalTime( &tick );
- if( tick - lastTick > 120 )
- {
- MessageBeep(MB_ICONEXCLAMATION);
- didSound = TRUE;
- lastTick = tick;
- }
- }
- #endif
- }
- return kMNoCompErr;
- }
- else
- return kMUnableToComplyCompErr;
- }
-
-
- /* Adjust project-specific IDs
- */
-
- static MErr MCompAdaptIDs(BeepComp *self, MObjectPtr *sourceStore, MObjectPtr *targetStore)
- {
- MTranslateID(kMTranslateEventID, sourceStore, targetStore, (MDataType *) &self->f_activateEvent);
- return kMNoCompErr;
- }
-